﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BL;
using BE;
using System.Data;
using CrystalDecisions.Shared;

namespace UI.Tesoreria
{
    public partial class FrmComprobanteCheque : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                
                    LLenarComboPeriodos();
                    LLenarComboTipoComprobantes();
                    txtFechaDocumento.Text = DateTime.Now.ToShortDateString();
                    NumeracionActual();
               
            }
            else {
            }
        }




        private void LLenarComboPeriodos()
        {
            Cheque_BL cp = new Cheque_BL();
            List<Periodo> lista = cp.ObtenerPeriodos();
            ComboPeriodo.DataSource = lista;
            ComboPeriodo.DataTextField = "Semestre";
            ComboPeriodo.DataValueField = "ID";
            ComboPeriodo.DataBind();
        }

        private void LLenarComboTipoComprobantes()
        {
            Cheque_BL cp = new Cheque_BL();
            List<TipoDocumento> lista = cp.ObtenerTipoDocumentos();
            ComboTipoDocumento.DataSource = lista;
            ComboTipoDocumento.DataTextField = "Nombre";
            ComboTipoDocumento.DataValueField = "IDTipoCp";
            ComboTipoDocumento.DataBind();
        }
        protected void CheckClienteReferencial_CheckedChanged(object sender, EventArgs e)
        {

            ViewState["SocioNegocioSeleccionado"] = null;
            txtNombreCliente.Text = "";

            if (CheckClienteReferencial.Checked)
            {
                txtNombreCliente.Enabled = true;
                btnBuscarAlumno.Visible = false;
            }
            else {
                txtNombreCliente.Enabled = false;
                btnBuscarAlumno.Visible = true;
            }

        }
       

     
       private void GrabarCabecera()
       {
           Cheque_BL cpb = new Cheque_BL();
           Cheque cp = (Cheque)Session["Cp"];
           cp.TipoDocumento = cpb.ObtenerTipoDocumentoXid(ComboTipoDocumento.SelectedItem.Value);
           cp.FechaCreacion = DateTime.Now;
           cp.Estado_Documento = "PENDIENTE";
           cp.EsClienteReferencial = CheckClienteReferencial.Checked;
           cp.NombreCliente = txtNombreCliente.Text;
           cp.Periodo = cpb.obtenerPeriodoxId(ComboPeriodo.SelectedItem.Value);
       }

       private void GenerarReporteChequeDESCARGA(String idCp)
       {
                labelErrorCp.Text = "";
                try
                {
                    Formato_Cheque reporte = new Formato_Cheque();
                    Cheque_BL rcv = new Cheque_BL();
                    DataTable data = rcv.FormatoCheque(idCp);

                    reporte.SetDataSource(data);
                    System.IO.MemoryStream rptStream = new System.IO.MemoryStream();
                    rptStream = (System.IO.MemoryStream)reporte.ExportToStream(ExportFormatType.PortableDocFormat);
                    Response.Clear();
                    Response.Buffer = true;
                    Response.ContentType = "application/pdf";
                    Response.AddHeader("Content-Disposition", "attachment;filename=" + "Impresion Cheque " + idCp + ".pdf");

                    Response.BinaryWrite(rptStream.ToArray());
                    reporte.Close();
                    Response.End();
                }
                catch (Exception ex)
                {
                                    labelErrorCp.Text = ex.Message;
                }

       }


        private void ValidarComprobante(Cheque cp){

            if (cp.EsClienteReferencial)
            {
                if (cp.NombreCliente == "")
                {
                    throw new Exception("Por favor seleccione un cliente");
                }
            }
            else {
                if (cp.SocioNegocio == null) {
                    throw new Exception("Por favor seleccione un cliente");
                }
            }

          

            if (cp.Total<= 0) {
                throw new Exception("El comprobantes tiene que ser mayor a 0 en total");
            }


        }

       protected void btnGuardarCpVenta_Click(object sender, ImageClickEventArgs e)
        {
            labelErrorCp.Text = "";
            String tramsaccioncompleta =Convert.ToString(Session["GRABO"]);
                if (tramsaccioncompleta.Equals("SI")) {
                    labelErrorCp.Text = "YA GRABO ESTE DOCUMENTO";
                    return;
                }  
            try
            {

            Cheque_BL cpb = new Cheque_BL();
            //ComprobanteVenta cp = (ComprobanteVenta)Session["Cp"];

            Cheque cp = new Cheque();

           //CABECERA
            cp.TipoDocumento = cpb.ObtenerTipoDocumentoXid(ComboTipoDocumento.SelectedItem.Value);
            cp.FechaCreacion = DateTime.Now;
            cp.Estado_Documento = "PENDIENTE";
            cp.EsClienteReferencial = CheckClienteReferencial.Checked;
            cp.CreadoPor = User.Identity.Name;

            if (cp.EsClienteReferencial == false) {
                if(!txtNombreCliente.Text.Equals("")){
                    cp.SocioNegocio = (SocioNegocio)ViewState["SocioNegocioSeleccionado"];
                }
            }
            cp.NombreCliente = txtNombreCliente.Text;
            cp.Periodo = cpb.obtenerPeriodoxId(ComboPeriodo.SelectedItem.Value);

           //DETALLE
            cp.PorcentajeImpuesto = cp.TipoDocumento.Impuesto;
            cp.SubTotal = Convert.ToDecimal(TxtMontoPagar.Text);
            cp.Impuesto = (cp.PorcentajeImpuesto / 100); 
            cp.Total = cp.SubTotal + cp.Impuesto;
        
       


            ValidarComprobante(cp);

            cpb.Insertar(cp);
            Session["GRABO"] = "SI";
            GenerarReporteChequeDESCARGA(cp.IDCp.ToString());

            }
            catch (Exception ex)
            {
                labelErrorCp.Text = "Error: ";
                labelErrorCp.Text += ex.Message.ToString();
            }  
        }
       private void LimpiarControles() {

           ComboPeriodo.SelectedItem.Value = null;
           CheckClienteReferencial.Checked = false;
           txtNombreCliente.Text = null;
           txtCodigo0.Text = null;
           txtNombreCliente.Text = null;
           Session["Cp"] = null;

           ComprobanteVenta cp = new ComprobanteVenta();
           Session["Cp"] = cp;

       
       }
       protected void ImageButton4_Click(object sender, ImageClickEventArgs e)
       {
           Response.Redirect("frmComprobanteChequeLista.aspx");
       }
       protected void btnBuscarModal_Click(object sender, EventArgs e)
       {
           lblMensajeModal.Text = "";
           Alumno_BL OBJ = new Alumno_BL();
           DataTable dato = new DataTable();

           Cheque_BL obj2 = new Cheque_BL();

           string codigo = "";
           if (txtModalCodigo.Text.Trim().Length == 0)
           {
               codigo = "TODOS";
           }
           else
           {
               codigo = txtModalCodigo.Text.Trim();
           }



           dato = OBJ.DATA_MAESTRO1_ListaAlumnos("TODOS", codigo);

           if (dato.Rows.Count == 0)
           {
               lblMensajeModal.Text = "Alumno no existe.";
               txtModalCodigo.Focus();
           }
           else
           {
               grvAgregaAlumnos.DataSource = dato;
               grvAgregaAlumnos.DataBind();
           }
       }

       protected void grvAgregaAlumnos_SelectedIndexChanged(object sender, EventArgs e)
       {

           try
           {
               string codigo = "";

               codigo = grvAgregaAlumnos.SelectedRow.Cells[1].Text;


               ComprobanteVenta_BL cpbl = new ComprobanteVenta_BL();
               BE.SocioNegocio sn = cpbl.ObtenerSocioNegocioXid(codigo);
               txtNombreCliente.Text = sn.ApellidoPaterno + " " + sn.ApellidoMaterno + "," + sn.Nombres;
               ViewState["SocioNegocioSeleccionado"] = sn;

               ComprobanteVenta_BL obj3 = new ComprobanteVenta_BL();
              
              
               mpeAgregaAlumno.Hide();

           }
           catch (Exception ex)
           {
               labelErrorCp.Text = ex.Message;
           }
			
       }
       protected void btnBuscarAlumno_Click(object sender, ImageClickEventArgs e)
       {
           lblMensajeModal.Text = "";
           DataTable dato = new DataTable();
           grvAgregaAlumnos.DataSource = dato;
           grvAgregaAlumnos.DataBind();
           lblMensajeModal.Text = "";
           mpeAgregaAlumno.Show();
       }
       protected void btnSalir_Click(object sender, EventArgs e)
       {
           mpeAgregaAlumno.Hide();
       }




 
        
   protected void grvAgregaAlumnos_PageIndexChanging(object sender, GridViewPageEventArgs e)
       {           
           //GridView gv = (GridView)sender;
           //gv.PageIndex = e.NewPageIndex;
           //grvAgregaAlumnos.PageIndex = e.NewPageIndex;
           mpeAgregaAlumno.Show();
           
       }
        
        protected void ImageButton5_Click(object sender, ImageClickEventArgs e)
        {
            Session["GRABO"]=null;
            Response.Redirect("FrmComprobanteCheque.aspx");
        }

        
        

        private void NumeracionActual() {
            labelErrorCp.Text = "";
            try
            {
                TipoDocumento_BL tipobl = new TipoDocumento_BL();
                TipoDocumentoCheque tipocp= tipobl.obtenerTipoChequePorId(ComboTipoDocumento.SelectedItem.Value);
                txtCodigo0.Text = tipocp.Serie_Codigo+"-"+(tipocp.NumeracionActual + 1).ToString().PadLeft(tipocp.Numeracion_Longitud,'0');

            }
            catch (Exception ex)
            {
                labelErrorCp.Text = ex.Message;
            }
        }

        protected void ComboTipoDocumento_SelectedIndexChanged(object sender, EventArgs e)
        {
            NumeracionActual();
           
        }

        protected void UpdatePanel2_Disposed(object sender, EventArgs e)
        {

        }

        protected void UpdatePanel2_PreRender(object sender, EventArgs e)
        {

        }

        protected void UpdatePanel2_Init(object sender, EventArgs e)
        {

        }

        protected void UpdatePanel2_Load(object sender, EventArgs e)
        {

        }

        protected void UpdatePanel2_Unload(object sender, EventArgs e)
        {
         
        }  
    }
}